package vue;

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;

import javax.swing.JButton;
import javax.swing.JPanel;

import java.io.File;
import java.net.URL;

import java.util.Observable;
import java.util.Observer;

import controleur.CStartGame;

import memory.*;
import modele.MGrid;

@SuppressWarnings("serial")
public class VLevel extends JPanel implements Observer {
	
	/*
	 * GUI principale d'une partie
	 */
	
	/*Liens avec la grille (Modele et Vue)*/
	protected MGrid mGrid;
	protected VGrid vGrid;
	
	/*Lien avec la fenetre principale*/
	protected VRootWindow rootWin;
	
	/*Informations generales*/
	protected int height, width, theme;
	private JButton b;
	
	public VLevel(VRootWindow rw, int h, int l, int th) throws NombreImpairException {
		
		/*
		 * Construction d'une partie de taille h*l avec le theme th
		 */
		
		rootWin = rw;
		height = h;
		width = l;
		theme = th;
		
		/*Creation de la grille*/
		mGrid = new MGrid(h, l, th);
		mGrid.addObserver(this);
		
		/*Instanciation des composants*/
		vGrid = new VGrid(mGrid);
		
		b = new JButton("Commencer la partie");
		b.addActionListener(new CStartGame(b, mGrid));
		
		/*Comportement grahique/Mise en page*/
		setBackground(Memory.BG_COLOR);
		
		setLayout(new GridBagLayout());
		GridBagConstraints constraint = new GridBagConstraints();
		
		constraint.gridx = 0;
		constraint.gridy = 0;
		add(vGrid, constraint);
		
		constraint.gridx = 0;
		constraint.gridy = 1;
		constraint.insets = new Insets(50, 0, 0, 0);
		add(b, constraint); 
	}
	
	public void buildEndLevel() {
		
		/*
		 * Construit l'interface de fin de partie, comporte :
		 * -Un smiley positionné au centre de la fenetre
		 * -Deux boutons placés respectivement en bas à droite et en bas à gauche :
		 * --Recommencer : re-construit une grille de même taille avec le même theme
		 * --Niveau suivant : construit une grille de taille supérieure avec le même theme
		 */
		
		vGrid.setVisible(false);
		
		setLayout(new GridBagLayout());
		GridBagConstraints c = new GridBagConstraints();
		//Pour éloigner les composants les uns des autres (...)
		c.weightx=1;
		c.weighty=1;
		
		c.gridx = 1;
		c.gridy = 0;
		c.anchor = GridBagConstraints.CENTER;
		add(new VSmiley(), c);
		
		//TODO : Les extraire de VEndBar si cette classe n'est plus necessaire
		VEndBar end = new VEndBar(rootWin, height, width, theme);
		
		c.gridx = 0;
		c.gridy = 1;
		add(end.getReplay(), c);
		
		c.gridx = 2;
		c.gridy = 1;
		add(end.getNext(), c);
		
		//déclenche le son du succès
		try {
			WavPlayer player;
			player = new WavPlayer(getClass().getResource("applause.wav"));
			Thread ThPlayer = new Thread(player);
			ThPlayer.start();
		} catch (Exception e1) {}
		
		
	}
	
	//Méthode invoqué par le modele lorsque la partie est terminée
	public void update(Observable arg0, Object arg1) {
		buildEndLevel();
	}

}
